# 导入用户仓储类
from repositories.user_repository import UserRepository
# 导入事务管理装饰器
from utils.decorators import transactional

class UserService:
    """
    用户业务逻辑层。
    负责处理与用户相关的业务规则和流程。
    所有需要数据库操作的方法都应该使用@transactional装饰器来确保事务的原子性。
    """
    def __init__(self):
        # 在服务实例化时，创建一个仓储类的实例
        self.user_repository = UserRepository()
    
    # @transactional装饰器会自动提供'session'参数，并管理事务
    @transactional
    def create_user(self, session, user_data):
        """
        创建新用户的业务逻辑。
        这里可以添加更复杂的逻辑，例如：
        1. 检查用户名是否已存在。
        2. 对密码进行哈希加密。
        3. 创建成功后发送欢迎邮件。
        """
        # 调用仓储层的方法来执行实际的数据库插入
        return self.user_repository.create(session, user_data)

    @transactional
    def get_user_by_id(self, session, user_id):
        """根据ID获取用户。"""
        return self.user_repository.get_by_id(session, user_id)

    @transactional
    def update_user(self, session, user_id, user_data):
        """更新用户信息的业务逻辑。"""
        # 可以在这里添加权限检查等逻辑
        return self.user_repository.update(session, user_id, user_data)

    @transactional
    def delete_user(self, session, user_id):
        """删除用户的业务逻辑。"""
        # 可以在这里添加逻辑，比如删除用户前先删除其关联数据
        return self.user_repository.delete(session, user_id)